home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oh!X 2001 Spring
/
Oh!X 2001 Spring Special CD-ROM (Japan).7z
/
Oh!X 2001 Spring Special CD-ROM (Japan) (Track 1).bin
/
PUZZLE
/
puz01
/
keiro.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-02-20
|
1KB
|
72 lines
/*
* keiro.c : 経路の探索
*
*/
/*
1 3 5
B------D------F
/│ │
0 A │ │
\│ │
C------E------G
2 4 6
経路図
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NODE 7
/* 隣接リスト */
const char adjacent[NODE][4] = {
1, 2, -1, -1, /* A */
0, 2, 3, -1, /* B */
0, 1, 4, -1, /* C */
1, 4, 5, -1, /* D */
2, 3, 6, -1, /* E */
3, -1, -1, -1, /* F */
4, -1, -1, -1, /* G */
};
/* 経路 */
char path[NODE];
/* 経路の表示 */
void print_path( int len )
{
int i;
for( i = 0; i <= len; i++ ){
printf("%c ", path[i] + 'A' );
}
printf("\n");
}
/* 経路の探索 */
void search( int len, int node, int goal )
{
path[len] = node;
if( node == goal ){
/* 到達した */
print_path( len );
} else {
int n, i;
for( i = 0; (n = adjacent[node][i]) != -1; i++ ){
if( memchr( path, n, len ) == NULL ){
search( len + 1, n, goal );
}
}
}
}
int main()
{
/* A -> G */
search( 0, 0, 6 );
return 0;
}
/* end of file */